home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / powervww / pvitems.h < prev    next >
C/C++ Source or Header  |  1998-01-05  |  13KB  |  243 lines

  1. //  ____________________________________________________
  2. // |                                                    |
  3. // |  Project:     POWER VIEW INTERFACE                 |
  4. // |  File:        PVITEMS.H                            |
  5. // |  Compiler:    WPP386 (10.6)                        |
  6. // |                                                    |
  7. // |  Subject:     Base class for PV items interface    |
  8. // |                                                    |
  9. // |  Author:      Emil Dotchevski                      |
  10. // |____________________________________________________|
  11. //
  12. // E-mail: zajo@geocities.com
  13. // URL:    http://www.geocities.com/SiliconValley/Bay/3577
  14.  
  15. #ifndef _PVITEMS_H
  16. #define _PVITEMS_H
  17.  
  18. #define xCENTER -32767
  19. #define yCENTER -32767
  20. #define xlMAX   -32767
  21. #define ylMAX   -32767
  22.  
  23. //ITEM FLAGS
  24.  
  25. //ALL ITEMS
  26. #define ifVISIBLE            0x0001 //<Y> item can draw itself
  27. #define ifBUFFERED           0x0002 //<N> item supports draw buffer
  28. #define ifSELECTABLE         0x0004 //<Y> item can be selected
  29. #define ifCLOSEABLE          0x0008 //<Y> item supports cmDONE command
  30. #define ifMOVABLE            0x0010 //<Y> item can be dragged
  31. #define ifRESIZEABLE         0x0020 //<Y> item can be resized
  32. #define ifTAB_STOP           0x0040 //<Y> item is selected when user tabs
  33. #define ifTILEABLE           0x0080 //<N> item can be tiled in a group
  34. #define ifICONIZEABLE        0x0100 //<N> item can be iconized in a group
  35. #define ifSTAY               0x0200 //<N> do not dispose the item
  36. #define ifPRE_PROCESS        0x0400 //<N> get focused msg before current
  37. //MENU
  38. #define mfSUSPEND_SELECTION  0x1000 //<Y> delay on submenu open
  39. //BUTTON
  40. #define bfGRAB_FOCUS         0x0800 //<N> gets selected when pressed
  41. #define bfREPEAT             0x1000 //<N> repeat message if held down
  42. #define bfBROADCAST          0x2000 //<N> if not receiver is the owner
  43. #define bfSTOP_MODAL         0x4000 //<N> to stop owner exec or not
  44. #define bfDEFAULT            0x8000 //<N> is this the default button
  45. //LIST BOX
  46. #define lfMULTIPLY_SELECTION 0x1000 //<N>
  47. #define lfSTOP_MODAL         0x2000 //<Y>
  48. //SCROLL BAR
  49. #define sfHANDLE_KEYBOARD    0x1000 //<N> if not bar ignores kbd messages
  50. #define sfHIDEABLE           0x2000 //<Y> hide bar when it is full,or not
  51. #define sfNOTICE             0x4000 //<N> as acted send cmSCROLL_BAR to owner
  52. //TABLE
  53. #define tfDOUBLE_CLICK_OK    0x1000 //<Y> table send cmOK when double clicked
  54. #define tfDIALOG             0x2000 //<N>
  55. #define tfWHOLE_LINES        0x4000 //<Y> table selection moves whole lines
  56.  
  57. //ITEM STATES
  58.  
  59. //ITEM
  60. #define isVALID              0x0001 //item can be used
  61. #define isMODAL              0x0002 //item is currently modal
  62. #define isSELECTED           0x0004 //item is selected
  63. #define isFOCUSED            0x0008 //item is focused
  64. #define isDISABLED           0x0010 //item is disabled
  65. #define isON_TOP             0x0020 //item is on top of the owner
  66. #define isHIDDEN             0x0040 //item is hidden
  67. #define isICONIZED           0x0080 //item is currently iconized
  68. #define isALIVE              0x0100 //(indirectly) owned by the app
  69. #define isACCESSABLE         0x0200 //(ind) owned by the modal item
  70. #define isACTIVE             0x0400 //isSELECTED or not ifSELECTABLE
  71. //WINDOW
  72. #define wsMAXIMIZED          0x1000 //window is currently maximized
  73. //BUTTON
  74. #define bsDEFAULT            0x1000 //button is the default button
  75.  
  76. //ITEM DRAG MODES
  77.  
  78. #define dmDONT_DRAG          0x0000
  79. #define dmDRAG_HOR           0x0001 //drag when owner width changes
  80. #define dmDRAG_VER           0x0002 //drag when owner heigh changes
  81. #define dmDRAG_BOTH          dmDRAG_HOR+dmDRAG_VER
  82. #define dmDRAG_REL           0x0004 //drag rel. to the owner bounds
  83.  
  84. //ITEM GROW MODES
  85.  
  86. #define gmDONT_GROW          0x0000
  87. #define gmGROW_HOR           0x0001 //grow when owner width changes
  88. #define gmGROW_VER           0x0002 //grow when owner heigh changes
  89. #define gmGROW_BOTH          gmGROW_HOR+gmGROW_VER
  90. #define gmGROW_REL           0x0004 //grow rel. to the owner bounds
  91.  
  92. typedef void ( * Ttile_error ) ( void );
  93. typedef void ( * Tdraw_proc ) ( void );
  94.  
  95. class Tdrag_drop;
  96.  
  97. class Titem
  98. {
  99. //<R> means read-only
  100. //<R/W> means read/write
  101.   public:
  102.     uint flags_word; //<R> holds item options
  103.     uint state_word; //<R> holds current state of the item
  104.     uint event_mask; //<R> events bit mask
  105.     Titem *next; //<R> next item in the owner's list ( cirular )
  106.     Titem *owner; //<R> the owner of the item
  107.     Titem *last; //<R> the last subitem
  108.     Titem *current; //<R> currently selected subitem
  109.     int x; //<R> upper-left corner x in owner's coordinate
  110.     int y; //<R> upper-left corner y in owner's coordinate
  111.     int xl; //<R> width in text chars
  112.     int yl; //<R> heigh in text lines
  113.     int bound_x; //<R> local x for item's bounding rectangle
  114.     int bound_y; //<R> local y for item's bounding rectangle
  115.     int bound_xl; //<R> item's bounding rectangle width
  116.     int bound_yl; //<R> item's bounding rectangle heigh
  117.     char grow_mode; //<R/W> how the item resize when owner resized
  118.     char drag_mode; //<R/W> how the item move when owner resized
  119.     long drop_id; //<R/W> drop identificator - used for drag&drop
  120.     uint stop_state; //<R> terminate code for the local exec loop
  121. #ifndef NOHELP
  122.     uint help_ctx; //<R/W> 0 - use owner's help ctx
  123. #endif
  124.     Titem( int _xl, int _yl );
  125.     virtual ~Titem( void );
  126.     Titem *first( void ); //return first subitem
  127.     Titem *prev( void ); //return previous item (circular)
  128.     Titem *nextl( void ); //return next item (linear)
  129.     Titem *prevl( void ); //return previous item (linear)
  130.     virtual void set_flags( uint _flags_word, boolean enable ); //set item's flags bits
  131.     inline boolean flags( uint _flags_word ) { return ( flags_word & _flags_word ) != 0; }
  132.     virtual void set_state( uint _state_word, boolean enable ); //set item's state bits
  133.     inline boolean state( uint _state_word ) { return ( state_word & _state_word ) != 0; }
  134.     boolean window_state( uint _state_word ); //check state bits of the item's owner just before the application or desktop ( usually this is the window that holds the item )
  135.     boolean focus( void ); //focus the item, returns 0 if not successfull
  136.     virtual void pop_up( void ); //called on mouse_click
  137.     virtual void tab_next( int direction ); //select next/previous tab stop item
  138.     virtual void local_next( int direction ); //select next/previous item between two tab stop items
  139.     void set_events_mask( uint mask, boolean enable ); //set item's event mask
  140.     virtual void drag( int _x, int _y ); //move the item to the _x,_y location
  141.     virtual void resize( int _xl, int _yl ); //resize the item to _xl/_yl width/heigh
  142.     void make_local( int x1, int y1, int &x2, int &y2 ); //convert global x1,y1 coordinates to local x2,y2
  143.     void make_global( int x1, int y1, int &x2, int &y2 ); //convert local x1,yl coordinates to global x2,y2
  144.     void get_origin( int &_x, int &_y ); //make_global( 0,0,_x,_y )
  145.     virtual boolean check_inside( int _x, int _y ); //return non-zero if point _x,_y is inside the item
  146.     virtual void redraw( void ); //invalidate the item, cousing it to be redrawn during next screen update session
  147.     virtual void handle_event( Tevent &ev ); //calls event_handler for every subitem ( if any ), and then, if the event still not serviced, calls self event_handler
  148.     Titem *handle_command( Titem *receiver, uint cmd_code ); //constructs a command event and calls receiver's handle event
  149.     virtual boolean valid( uint command ); //returns 0 if action command not allowed
  150.     virtual uint exec( void ); //start item modal loop
  151.     uint exec_item( Titem *p, int _x, int _y ); //insert p in the subitems list and executes p
  152.     virtual void put_in( Titem *v, int _x, int _y ); //insert item v in the subitems list
  153.     virtual boolean remove( Titem *v ); //remove item v from the subitems list. returns 0 if item not found
  154.     void update_bounds( Titem *p ); //update actual item bounds as subitem was moved/resized
  155.     void optimize_bounds( void ); //minimize actual